;**********************************************************************
;
; B3C-XERO.INS	A TIME insert for BYE335 and up
;
; Adapted from:
; MBC-XERO.ASM -- Version 1.0 -- 05/24/84 -- by Isaac Salzman
;
;	This insert is for a Xerox 820-II running BYE3. This
;	routine will only work on a Xerox 820-II, not an 820. It
;	will also (most likely) work on the 16/8 as well.
;
;	When called this routine will check the RTCBUF. If a '99H'
;	is in the first byte, the clock is initialized. Next the
;	seconds are checked, and if changed since last update of
;	RTC buffer, the clock is stopped, data copied to RTCBUF and
;	the clock is restarted. (If no change in seconds, the
;	routine returns immediately.)
;
;**********************************************************************
;
;
;Xerox clock initialization
;
XERCLK	EQU	0F039H		; Location of Xerox 820-II time vector
				; Monitor routine. When called, it returns
				; The addr of the 820's clock in high mem.
	 IF	RTC
TIME:	LXI	H,0		; Clear HL
	CALL	XERCLK		; Get pointer to TOD in HL
	MOV	A,M
	CALL	MOVETM
	STA	RTCBUF+6	; Get day
;
	INX	H
	MOV	A,M
	CALL	MOVETM
	STA	RTCBUF+5	; Get month
;
	INX	H
	MOV	A,M
	CALL	MOVETM
	STA	RTCBUF+4	; Get year
;
	INX	H
	MOV	A,M
	CALL	MOVETM
	STA	RTCBUF		; Update hours
;
	INX	H
	MOV	A,M
	CALL	MOVETM
	STA	RTCBUF+1	; Update minutes
;
	INX	H
	MOV	A,M
	CALL	MOVETM
	STA	RTCBUF+2	; Update seconds
;
	LDA	RTCBUF		; Get BCD HH
	CALL	BCDBIN		; And convert to binary
	STA	CCHOUR		; For BYE3
	LDA	RTCBUF+1	; Get BCD MM
	CALL	BCDBIN
	STA	CCMIN		; Binary for BYE3
	RET			; And return (for now..)
;
MOVETM:	MVI	B,0		; Clear reg B
CONV:	CPI	10		; Are we >= 10 ?
	JC	ADDREST		; No, add the rest
	SUI	10		; Subtract 10 from A
	MOV	C,A		; Put A in C (store it for a sec)
	MOV	A,B		; Put B in A
	ADI	16		; Add 16
	MOV	B,A		; Store it back in B
	MOV	A,C		; Get our original value back in A
	JMP	CONV
ADDREST:
	ADD	B		; Add the rest to what's in A
	RET			; Return
	 ENDIF	;RTC
;
;**********************************************************************
